// 重写

#include <iostream>
using namespace std;

// // 协变
// class A {};
// class B : public A {};
// class Person {
// public:
// 	virtual A* f() { 
// 		cout << "Person() -> f()" << endl;
// 		return new A; }
// };
// class Student : public Person {
// public:
// 	virtual B* f() { 
// 		cout << "Student() -> f()" << endl;
// 		return new B; }
// };
// void fun(Person& p)
// {
// 	p.f();
// }

// 析构函数重写(编译后析构函数名统一是destructor)
class Person {
public:
	virtual ~Person() { cout << "~Person()" << endl; }
};
class Student : public Person {
public:
	virtual ~Student() { cout << "~Student()" << endl; }
};

int main()
{
    // // 协变
	// Person p;
	// fun(p);
	// Student s;
	// fun(s);

    // 析构函数重写
    Person* p1 = new Person;
	Person* p2 = new Student;
	delete p1;
	delete p2;

	return 0;
}
